package org.now.ypos.dto;

import org.springframework.http.HttpStatus;

/**
 * ApiResponse
 *
 * @author wl
 * @since 2020.11.11
 */
public class ApiResponse {

    public static final String MSG_SUCCESS = "success";
    public static final String MSG_ERROR = "error";

    /**
     * 对应httpStatus
     */
    private int code;
    private String msg;
    private Object data;

    /**
     * 初始化一个新创建的 ApiResponse 对象
     *
     * @param status HttpStatus
     * @param msg    返回消息
     * @param data   数据对象
     */
    public ApiResponse(HttpStatus status, String msg, Object data) {
        this(status.value(), msg, data);
    }

    /**
     * 初始化一个新创建的 ApiResponse 对象
     *
     * @param code 状态code
     * @param msg  返回消息
     * @param data 数据对象
     */
    public ApiResponse(int code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    /**
     * 返回成功消息
     *
     * @return 成功消息
     */
    public static ApiResponse success() {
        return ApiResponse.success(MSG_SUCCESS);
    }

    /**
     * 返回成功数据
     *
     * @return 成功消息
     */
    public static ApiResponse success(Object data) {
        return ApiResponse.success(MSG_SUCCESS, data);
    }

    /**
     * 返回成功消息
     *
     * @param msg 返回内容
     * @return 成功消息
     */
    public static ApiResponse success(String msg) {
        return ApiResponse.success(msg, null);
    }

    /**
     * 返回成功消息
     *
     * @param msg  返回内容
     * @param data 数据对象
     * @return 成功消息
     */
    public static ApiResponse success(String msg, Object data) {
        return new ApiResponse(HttpStatus.OK, msg, data);
    }

    /**
     * 返回错误消息
     *
     * @return 错误消息
     */
    public static ApiResponse error() {
        return ApiResponse.error(MSG_ERROR);
    }

    /**
     * 返回错误消息
     *
     * @param msg 返回内容
     * @return 错误消息
     */
    public static ApiResponse error(String msg) {
        return ApiResponse.error(msg, null);
    }

    /**
     * 返回错误消息
     *
     * @param msg  返回内容
     * @param data 数据对象
     * @return 错误消息
     */
    public static ApiResponse error(String msg, Object data) {
        return new ApiResponse(HttpStatus.INTERNAL_SERVER_ERROR, msg, data);
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}
